// 控制器主要是执行逻辑
const jwt = require('jsonwebtoken')
const { createUser, getUserInfo, updateById } = require('../service/user.service')
const { userRegisterError } = require('../constant/err.type')
const { JWT_SECRET } = require('../config/config.default')

class UserController {
    async userRegister(ctx, next) {
        // 1.获取数据
        const { user_name, password } = ctx.request.body

        // 2.操作数据库
        try {
            const res = await createUser(user_name, password)
            console.log('res:', res)
            // 3.返回结果
            ctx.body = {
                code: '0000',
                message: '用户注册成功',
                result: {
                    id: res.id,
                    user_name: res.user_name
                }
            }
        } catch (err) {
            console.log(err)
            ctx.app.emit('error', userRegisterError, ctx)
        }

    }
    async userLogin(ctx, next) {
        const { user_name } = ctx.request.body
        ctx.body = `欢迎回来，${user_name}`
        // 1.获取用户信息（在token的payload中，记录id，user_name，is_admin）
        try {
            const { password, ...res } = await getUserInfo({ user_name })
            ctx.body = {
                code: '0000',
                message: '用户登录成功',
                result: {
                    // 这里的 expiresIn 设置的是超时时间，现在配置的是 1天
                    token: jwt.sign(res, JWT_SECRET, { expiresIn: '1d' })
                }
            }
        } catch (err) {
            console.error('用户登录失败', err)
        }
    }

    async changePassword(ctx, next) {
        // 1.获取数据
        const id = ctx.state.user.id
        const password = ctx.request.body.password
        // 2.操作数据库
        // 3.返回结果
        if (await updateById({ id, password })) {
            ctx.body = {
                code: '0000',
                message: '修改密码成功',
                result: ''
            }
        } else {
            ctx.body = {
                code: '10007',
                message: '修改密码失败',
                result: ''
            }
        }

    }
}

module.exports = new UserController()